package com.hfb.mashibing.alip8.mq.rabbit.routing;

import com.hfb.mashibing.alip8.mq.rabbit.util.ConnectionUtil;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

/**
 * 在路由模式中，
 * 生产者
 */
public class RoutingProducer {
    // 交换机名称
    public static final String DIRECT_EXCHANGE = "direct_exchange";
    // 队列1名称
    public static final String DIRECT_QUEUE_INSERT = "direct_queue_insert";
    // 队列2名称
    public static final String DIRECT_QUEUE_UPDATE = "direct_queue_update";


    public static void main(String[] args) throws Exception {
        // 1、创建连接工厂
        // 2、创建连接（工具类）
        Connection connection = ConnectionUtil.getConnection();
        // 3、创建频道
        Channel channel = connection.createChannel();
        // 声明交换机
        channel.exchangeDeclare(DIRECT_EXCHANGE, BuiltinExchangeType.DIRECT);
        // 4、声明队列
        /**
         * 参数1-队列名称
         * 参数2-是否是持久化队列（消息回持久化在服务器上）
         * 参数3-是否独占本连接
         * 参数4-是否在不使用的时候队列自动删除
         * 参数5-其他参数
         */
        channel.queueDeclare(DIRECT_QUEUE_INSERT,true,false,false,null);
        channel.queueDeclare(DIRECT_QUEUE_UPDATE,true,false,false,null);

        // 队列绑定到交换机
        channel.queueBind(DIRECT_QUEUE_INSERT,DIRECT_EXCHANGE,"insert");
        channel.queueBind(DIRECT_QUEUE_UPDATE,DIRECT_EXCHANGE,"updata");

        // 5、发送消息
        String msg = "Hello,你好，RabbitMq。路由key：insert";
        //参数1-交换机，空串代表使用默认路由器
        //参数2-路由key，在简单模式中，可以使用队列名称
        //参数3-消息其他属性
        //参数4-消息内容
        channel.basicPublish(DIRECT_EXCHANGE,"insert",null,msg.getBytes());
        System.err.println(String.format("[%s]已发送！",msg));


        msg = "Hello,你好，RabbitMq。路由key：update";
        //参数1-交换机，空串代表使用默认路由器
        //参数2-路由key，在简单模式中，可以使用队列名称
        //参数3-消息其他属性
        //参数4-消息内容
        channel.basicPublish(DIRECT_EXCHANGE,"update",null,msg.getBytes());
        System.err.println(String.format("[%s]已发送！",msg));





    }

}
